import { defineStore } from 'pinia'
import { messageList } from '@api/chatApi'
import router from '@/router'

const TITLE = import.meta.env.VITE_APP_TITLE

export const useChatStore = defineStore('chat-store', {
  state: () => {
    return {
      message: '',
      listLoading: false,
      msgList: [],
      content: [],
      chatTitle: '',
      showChatSiderDrawer: false,
      getting: false,
      isNewChat: null,
      isAddedChat: false,
      gridData: [
        {
          title: '例子',
          isLink: true,
          data: [
            '"用简单的术语解释量子计算“→',
            '"对一个10岁的生日有什么创意吗？“→',
            '"如何在 Javascript 中发出 HTTP 请求？“→',
          ],
        },
        {
          title: '能力',
          isLink: false,
          data: ['记住用户之前在对话中所说的话', '允许用户提供后续更正', '接受过拒绝不当请求的培训'],
        },
        {
          title: '局限性',
          isLink: false,
          data: ['可能偶尔生成不正确的信息', '可能偶尔产生有害说明或有偏见的内容', '对2021年后的世界和事件的了解有限'],
        },
      ],
      roleList: [
        {
          name: '全能机器人',
          describe: '我是通用智能对话机器人，我可以回答您的所有问题。',
          role: 'robot',
        },
        {
          name: '智能翻译',
          describe: '我是一名精通各国语言的翻译员，我会尽量用高级优雅礼貌的词汇翻译您的内容。',
          role: 'interpreter',
        },
        {
          name: 'IT专家',
          describe: '我是一名精通所有编程语言的IT专家，我会尽量回答您提出的编程相关的问题。',
          role: 'programmer',
        },
        {
          name: '健康助理',
          describe:
            '我是一名人工智能健康助理，我可以根据您提出的问题诊断最可能导致其症状的原因，并给出保守的治疗方案。',
          role: 'doctor',
        },
        {
          name: '优秀作家',
          describe: '我是一名优秀的作家，我可以根据您的需求，生成一篇用词优雅的文章。',
          role: 'writer',
        },
        {
          name: '高级厨师',
          describe: '我是一名高级厨师，您可以问我烹饪相关的问题，我也可以向您推荐美味的食谱。',
          role: 'cook',
        },
      ],
      selectRole: 'robot',
      selectRoleKey: 0,
      conversationId: '',
    }
  },
  getters: {},
  actions: {
    setDocTitle(val) {
      this.chatTitle = val
      document.title = `${TITLE} | ${val}`
    },
    async getMsgList() {
      try {
        this.listLoading = true
        const res = await messageList()
        if (res.statusCode === 200) {
          this.msgList = res.data
        }
      } finally {
        this.listLoading = false
      }
    },
    openNewChat() {
      this.$patch({
        showChatSiderDrawer: false,
        message: '',
        conversationId: '',
        selectRole: 'robot',
        selectRoleKey: 0,
        isNewChat: true,
        isAddedChat: false,
        content: [],
      })
      this.setDocTitle('新对话窗口')
      router.replace('/chat/new')
    },
    closeChatSiderDrawer() {
      this.showChatSiderDrawer = false
    },
    addChat(chat) {
      this.msgList.unshift(chat)
    },
    changeMsg(msg) {
      this.message = msg
    },
    changeRole(role, index) {
      console.log(role, index)
      this.$patch({
        selectRole: role,
        selectRoleKey: index,
      })
    },
  },
})
